/**
 * 保留上一次更改内容
 * @param {*} old
 * @param {*} update
 */

export function take_array(arr, results) {
  arr.forEach((item) => {
    if (item.children) {
      results.set(item.prop, {
        ...item,
        children: null
      })
      return take_array(item.children, results)
    } else {
      results.set(item.prop, {
        ...item,
        children: null
      })
    }
  })
  return results
}

export default function keep_data(old, update) {
  const M = take_array(old, new Map())

  return update.map((item) => {
    const j = {
      ...item,
      required: M.get(item.prop) ? M.get(item.prop).required : item.required,
      type: M.get(item.prop) ? M.get(item.prop).type : item.type,
      optional: M.get(item.prop) ? M.get(item.prop).optional : item.optional,
      label: M.get(item.prop) ? M.get(item.prop).label : item.label,
      note: M.get(item.prop) ? M.get(item.prop).note : item.note
    }
    return j
  })
}
